package biblio;

import java.util.GregorianCalendar;

/**
 * Classe de gestion du controle du cas d'utilisation
 * "Rendre un exemplaire non disponible".
 * 
 * @author IUT, refactor� par E. Ceret
 * @version 2.0
 * 
 */
public class CtrNouvExemplaire {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private Bibliotheque _bibliotheque;

	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur.
	 * @param bibliotheque biblioth�que � laquelle ce contr�leur est li�.
	 */
	public CtrNouvExemplaire(Bibliotheque bibliotheque) {

		// Liaison avec l'appli "Bibliotheque"
		this.lierBibliotheque(bibliotheque);
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes priv�es
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs

	private Bibliotheque getBibliotheque() {
		return _bibliotheque;
	}
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs

	private void lierBibliotheque(Bibliotheque bibliotheque) {
	    _bibliotheque = bibliotheque;
	} // Fin lierBibliotheque
	
	// ************************************************************************************************************
	// M�thodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Traitements

	public void nouvExemplaire() {
		EntreesSorties.afficherTitre("Ajout d'un exemplaire");

		// Saisie d'un n� d'ISBN
		String isbn = EntreesSorties.lireChaine("Numero ISBN :");

		// V�rification de l'existence de l'ouvrage / ISBN
		Ouvrage ouvrage = this.getBibliotheque().getOuvrage(isbn);
		
		if (ouvrage != null) { // L'ouvrage existe
			
			// Saisie de la date de r�ception de l'exemplaire
			GregorianCalendar dateRecep = EntreesSorties.lireDate("Date de reception (JJ/MM/AAAA): ");

			// Invariant : date r�ception de l'exemplaire doit �tre sup�rieure � la date d'�dition de l'ouvrage
			if (ouvrage.verifDate(dateRecep)) {

				// Demande d'ajout de l'exemplaire
				this.getBibliotheque().nouvelExemplaire(ouvrage, dateRecep);

				// Cr�ation de la vue
				VueOuvrage vueOuvrage = new VueOuvrage(ouvrage);

				// Affichage des informations de l'ouvrage
				vueOuvrage.afficherTout();
				
				// Suppression de la vue vueOuvrage comme Observatrice de l'objet ouvrage
				vueOuvrage.elimineObserveur();
				vueOuvrage = null;
			} else {
				EntreesSorties.afficherMessage("Date de Reception incorrecte / � la date d'Edition.");
			}
		} else {
			EntreesSorties.afficherMessage("Ouvrage inconnu.");
		}
	} // Fin Constructeur
} // Fin Classe CtrNouvExemplaire
